<?php
class cpHtmlCache {
	static private $cacheFile = "";
	
	//检查规则，看是否满足生成静态页面的条件 
	static public function getCacheFile($cachePath){
		if( isset($_SERVER['PATH_INFO']) ) {
			$url = $_SERVER['PATH_INFO'];
		} else {
			$script_name = $_SERVER["SCRIPT_NAME"];//获取当前文件的路径
			$url = $_SERVER["REQUEST_URI"];//获取完整的路径，包含"?"之后的字符串
			
			//去除url包含的当前文件的路径信息
			if ( $url && @strpos($url, $script_name, 0) !== false ){
				$url = substr($url, strlen($script_name));
			} else {
				$script_name = str_replace(basename($_SERVER["SCRIPT_NAME"]), '', $_SERVER["SCRIPT_NAME"]);
				if ( $url && @strpos($url, $script_name, 0) !== false ){
					$url = substr($url, strlen($script_name));
				}
			}
		}
		//第一个字符是'/'，则去掉
		if ($url[0] == '/') {
			$url = substr($url, 1);
		}
		
		if( empty($url) ){ //首页
			$file = 'index.html';
		}else if( empty($_SERVER['QUERY_STRING']) && preg_match("#^[a-z0-9_\-\/%]+\.(shtml|html|htm)$#i", $url) ){ //静态页面
			$file =$url;
		} else { //静态缓存
			$url_md5 = md5($url);
			$file = $url_md5{0}. '/' . $url_md5{1} . '/' . $url_md5 . '.html';		
		}
		$file = $cachePath . $file;
		$dir = dirname( $file );
		if ( !is_dir($dir) ) {
			@mkdir($dir, 0777, true);
		}
		return $file;
	}
	
	//读取静态缓存文件
	static public function read($cachePath="", $expire=1800){
		self::$cacheFile = self::getCacheFile($cachePath);	
		//静态缓存文件存在，且没有过期，则直接读取
		if ( file_exists(self::$cacheFile) && (time() < ( filemtime(self::$cacheFile) + $expire )) ){
			return readfile(self::$cacheFile);		
		}else{
			ob_start();
			return false;
		}
	}
	
	//写入静态缓存文件
	static public function write() {	
		$contents = ob_get_contents();
		if ( strlen($contents)>0 ){
			file_put_contents(self::$cacheFile, $contents);
		}
		ob_end_flush();
		flush(); 
	}
}